// 该组件是表格内容过多省略号展示，弹出的 tooltip 不能复制，通过该插件直接按住alt可以选中复制，注意：要放在Vue.use(element)后面
import { Table } from 'element-ui'

const TablePatched = {
  extends: Table,
  mounted () {
    document.addEventListener('keydown', this.keydown)
    document.addEventListener('keyup', this.keyup)
  },
  destroyed () {
    document.removeEventListener('keydown', this.keydown)
    document.removeEventListener('keyup', this.keyup)
  },
  methods: {
    keydown (e) {
      if (e.key !== 'Alt') {
        return
      }

      const tableBody = this.$children.find(
        item => item.$options._componentTag === 'table-body'
      )
      if (!tableBody.$refs.tooltip || !tableBody.$refs.tooltip.expectedState) {
        return
      }
      // 把原生的 handleClosePopper 方法 copy 一份
      tableBody.$refs.tooltip.handleClosePopperBak =
        tableBody.$refs.tooltip.handleClosePopper
      // 设置改方法为 空方法
      tableBody.$refs.tooltip.handleClosePopper = () => {} // 👈 重点
      // 复制tooltip实例对象
      tableBody.$refs.tooltipBak = tableBody.$refs.tooltip
      // 删除
      delete tableBody.$refs.tooltip // 👈 重点
    },
    keyup (e) {
      if (e.key !== 'Alt') {
        return
      }
      const tableBody = this.$children.find(
        item => item.$options._componentTag === 'table-body'
      )
      if (!tableBody.$refs.tooltipBak) {
        return
      }
      // 以下是还原操作，同时把复制的内容删掉
      tableBody.$refs.tooltip = tableBody.$refs.tooltipBak
      delete tableBody.$refs.tooltipBak

      tableBody.$refs.tooltip.handleClosePopper =
        tableBody.$refs.tooltip.handleClosePopperBak
      delete tableBody.$refs.tooltip.handleClosePopperBak
    }
  }
}

export default {
  install (Vue) {
    Vue.component(Table.name, TablePatched)
  }
}
